package menuNav

import (
	"github.com/gofiber/fiber/v2"
	"sg-backend/global"
	"sg-backend/model/user"
	"sg-backend/utils"
)

// NavMenuJson 树形菜单数据结构
type NavMenuJson struct {
	Name     string        `json:"name"`
	Icon     string        `json:"icon"`
	Path     string        `json:"path"`
	Children []NavMenuJson `json:"children"`
}

/*
 * method  GET
 * path    /api/user/menuNav
 */

// GetMenuNav GET请求，获取菜单Tree结构数据
func GetMenuNav(ctx *fiber.Ctx) error {

	// 获取并处理
	treeData := GetMenuNavTree(0)
	//fmt.Println(t)
	//return ctx.JSON(fiber.Map{
	//	"success": true,
	//	"status":  "done",
	//	"message": "请求成功！",
	//	"data":    treeData,
	//})
	return ctx.JSON(fiber.Map{
		"status": "done",
		"data":   treeData,
	})
}

// GetMenuNavTree 函数：获取菜单树形数据结构
func GetMenuNavTree(deptPid uint) []NavMenuJson {

	// 根据Pid，获取部门信息
	var menuList []user.Menu
	global.DB.Order("order_num").Where("pid = ?", deptPid).Find(&menuList)

	// 整理数据
	var data []NavMenuJson
	for _, v := range menuList {

		// 验证是否有权限
		hasPerm := utils.CheckPermsByTagNoPanic(v.PrivilegeName, global.AuthUser.UserId, "read")
		if hasPerm == true {

			// 用户有权限
			// 递归获取children
			subData := GetMenuNavTree(v.Id)
			if len(subData) != 0 {

				// 有下层菜单
				data = append(data, NavMenuJson{Name: v.Title, Icon: v.Icon, Path: v.Url, Children: subData})
			} else {

				// 无下层菜单
				data = append(data, NavMenuJson{Name: v.Title, Icon: v.Icon, Path: v.Url})
			}

		}
	}

	return data
}
